package reflect;

import reflect.annotation.AutoRunClass;
import reflect.annotation.AutoRunMethod;

import java.lang.reflect.Method;
import java.util.Scanner;

/**
 * 调用Person类中所有被注解@AutoRunMethod 标注的method
 */
public class Test4 {
    public static void main(String[] args) throws Exception {
        //


        System.out.println("请输入一个类名：");
        Scanner scan=new Scanner(System.in);
        String className=scan.nextLine();

        Class cls=Class.forName(className);

        boolean mark=cls.isAnnotationPresent(AutoRunClass.class);
        if (mark){
            Object obj=cls.newInstance();
            //get method
            System.out.println("该类被注解了");

            //判断输入的方法是否被注解，并执行
            System.out.println("请输入需要调用的方法");
            String methodName=scan.nextLine();
            Method method=cls.getMethod(methodName);
            if (method.isAnnotationPresent(AutoRunMethod.class)){
                System.out.println("该方法被注解了,立即执行"+method.getName()+"()");
                method.invoke(obj);
            }else {
                System.out.println("该方法没有被注解");
            }

            // 遍历所有方法 执行注解的方法
            Method[] methods= cls.getMethods();
            for (Method m:methods){
                if (m.isAnnotationPresent(AutoRunMethod.class)){
                    m.invoke(obj);
                }
            }

        }else {
            System.out.println("该类没有注解");
        }

    }
}
